package com.openharmony.filepicker.config;

import com.openharmony.filepicker.bean.FileItemBeanImpl;
import com.openharmony.filepicker.filetype.AudioFileType;
import com.openharmony.filepicker.filetype.CompressedFileType;
import com.openharmony.filepicker.filetype.FileType;
import com.openharmony.filepicker.filetype.RasterImageFileType;
import com.openharmony.filepicker.filetype.DataBaseFileType;
import com.openharmony.filepicker.filetype.ExecutableFileType;
import com.openharmony.filepicker.filetype.FontFileType;
import com.openharmony.filepicker.filetype.PageLayoutFileType;
import com.openharmony.filepicker.filetype.TextFileType;
import com.openharmony.filepicker.filetype.VideoFileType;
import com.openharmony.filepicker.filetype.WebFileType;
import java.util.ArrayList;

public class DefaultFileDetector extends AbstractFileDetector {

    private boolean enableCustomTypes = false;
    private ArrayList<FileType> allDefaultFileType = new ArrayList<>();

    public void registerDefaultTypes() {
        allDefaultFileType.clear();
        allDefaultFileType.add(new AudioFileType());
        allDefaultFileType.add(new RasterImageFileType());
        allDefaultFileType.add(new CompressedFileType());
        allDefaultFileType.add(new DataBaseFileType());
        allDefaultFileType.add(new ExecutableFileType());
        allDefaultFileType.add(new FontFileType());
        allDefaultFileType.add(new PageLayoutFileType());
        allDefaultFileType.add(new TextFileType());
        allDefaultFileType.add(new VideoFileType());
        allDefaultFileType.add(new WebFileType());
        enableCustomTypes = false;
    }

    public void registerCustomTypes(ArrayList<FileType> customFileTypes) {
        allDefaultFileType.clear();
        allDefaultFileType.addAll(customFileTypes);
        enableCustomTypes = true;
    }

    public void clear() {
        allDefaultFileType.clear();
        enableCustomTypes = false;
    }

    @Override
    public FileItemBeanImpl fillFileType(FileItemBeanImpl itemBeanImpl) {
        for (FileType type : allDefaultFileType) {
            if (type.verify(itemBeanImpl.getFileName())) {
                itemBeanImpl.setFileType(type);
                break;
            }
        }
        return itemBeanImpl;
    }

    public boolean isEnableCustomTypes() {
        return enableCustomTypes;
    }

    public void setEnableCustomTypes(boolean enableCustomTypes) {
        this.enableCustomTypes = enableCustomTypes;
    }

    public ArrayList<FileType> getAllDefaultFileType() {
        return allDefaultFileType;
    }

    public void setAllDefaultFileType(ArrayList<FileType> allDefaultFileType) {
        this.allDefaultFileType = allDefaultFileType;
    }
}
